---
author: hongbo
date: "2018-05-21"
previewImg:
badge: release
title: Announcing BuckleScript 3.1
description: |
---

## Newest Changes

List of changes
[here](https://github.com/BuckleScript/bucklescript/blob/master/Changes.md#310)!
Highlights:

### Print Record Keys and Variant Tags

A picture's worth a thousand words:

**Before:**

<img
  src="https://bucklescript.github.io/img/debugger-before.avif"
  alt="debugger before"
/>

**After:**

<img
  src="https://bucklescript.github.io/img/debugger-after.avif"
  alt="debugger after"
/>

Please see for usage.

## Even Better `bs.deriving abstract`

We've further polished our new way of binding to JS objects. The record fields
of a `bs.deriving abstract` can now accept functions.

## Pipe First Improvement

[Pipe First](../../docs/manual/pipe.mdx) now supports piping into variant tags!

```reason
let result = name |. preprocess |. Some
```

We turn this into:

```reason
let result = Some(preprocess(name))
```

### Js.Boolean Is Gone

Since BuckleScript 3.0, OCaml `bool` now compile to JS `boolean`. It was
deprecated (all the boolean conversion functions became no-ops, with warnings
during build), and now completely removed. No more need for the converter
functions!
